home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / fbimon.zip / EmxRexx / FBiMon.c next >
C/C++ Source or Header  |  1997-05-21  |  10KB  |  350 lines

  1. /* FBiMon.c */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #define INCL_BASE
  7. #define INCL_DOSDEVIOCTL
  8. #define INCL_REXXSAA
  9. #include <os2.h>
  10. #include "FBiMonApi.h"
  11. #include "FBiMon.h"
  12.  
  13. unsigned long _DLL_InitTerm (unsigned long mod_handle, unsigned long flag) {
  14.    ULONG action;
  15.  
  16.    switch (flag) {
  17.       case 0:
  18.          if (_CRT_init() == 0) {
  19.             __ctordtorInit();
  20.             return FBiMonInit();
  21.          }
  22.          return 0;
  23.       case 1:
  24.          FBiMonClose();
  25.          __ctordtorTerm();
  26.          _CRT_term();
  27.          return 1;
  28.       default:
  29.          return 0;
  30.    }
  31.    return 1;
  32. }
  33.  
  34. ULONG _System FBiMonSleep(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  35.    ULONG duree;
  36.  
  37.    if (numargs>1) {
  38.       retstr->strlength=1;
  39.       strcpy(retstr->strptr,"1");
  40.       return 1;
  41.    } /* endif */
  42.  
  43.    if (numargs==0) {
  44.       duree=1000;
  45.    } else {
  46.       sscanf(RXSTRPTR(args[0]),"%d",&duree);
  47.    } /* endif */
  48.  
  49.    DosSleep(duree);
  50.  
  51.    retstr->strlength=1;
  52.    strcpy(retstr->strptr,"0");
  53.    return 0;
  54. }
  55.  
  56. LONG _System FBiMonCls(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  57.    FBiMonSetMode(0);
  58.    retstr->strlength=1;
  59.    strcpy(retstr->strptr,"0");
  60.    return 0;
  61. }
  62.  
  63. ULONG _System FBiMonChiffre(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  64.    ULONG rc;            // result code
  65.  
  66.    long caractere='0';
  67.    long attribute=0;
  68.    long row=0;
  69.    long column=0;
  70.  
  71.    if (numargs!=4) {
  72.       retstr->strlength=1;
  73.       strcpy(retstr->strptr,"1");
  74.       return 1;
  75.    } /* endif */
  76.  
  77.    attribute=2;
  78.    sscanf(RXSTRPTR(args[0]),"%c",&caractere);
  79.    sscanf(RXSTRPTR(args[1]),"%d",&attribute);
  80.    sscanf(RXSTRPTR(args[2]),"%d",&column);
  81.    sscanf(RXSTRPTR(args[3]),"%d",&row);
  82.  
  83.    FBiMonAttribute(attribute);
  84.    switch (caractere) {
  85.    case '1':
  86.          FBiMonWriteString("  ▄██▄   ",column,row  );
  87.          FBiMonWriteString("▄█████   ",column,row+1);
  88.          FBiMonWriteString("▀▀████   ",column,row+2);
  89.          FBiMonWriteString("  ████   ",column,row+3);
  90.          FBiMonWriteString(" ▄████▄  ",column,row+4);
  91.          FBiMonWriteString("▀██████▀ ",column,row+5);
  92.          rc=9;
  93.       break;
  94.    case '2':
  95.          FBiMonWriteString(" ▄███████▄  ",column,row  );
  96.          FBiMonWriteString("███▀▀▀█████ ",column,row+1);
  97.          FBiMonWriteString("    ▄████▀  ",column,row+2);
  98.          FBiMonWriteString("  ▄████▀    ",column,row+3);
  99.          FBiMonWriteString("▄█████▄▄▄▄▄ ",column,row+4);
  100.          FBiMonWriteString("▀█████████▀ ",column,row+5);
  101.          rc=12;
  102.       break;
  103.    case '3':
  104.          FBiMonWriteString(" ▄███████▄  ",column,row  );
  105.          FBiMonWriteString("██▀   ▀████ ",column,row+1);
  106.          FBiMonWriteString("    ▄▄▄███▀ ",column,row+2);
  107.          FBiMonWriteString("    ▀▀▀███▄ ",column,row+3);
  108.          FBiMonWriteString("██▄   ▄████ ",column,row+4);
  109.          FBiMonWriteString(" ▀███████▀  ",column,row+5);
  110.          rc=12;
  111.       break;
  112.    case '4':
  113.          FBiMonWriteString(" ▄▄   ▄██▄ ",column,row  );
  114.          FBiMonWriteString("████  ████ ",column,row+1);
  115.          FBiMonWriteString("████▄▄████ ",column,row+2);
  116.          FBiMonWriteString("▀█████████ ",column,row+3);
  117.          FBiMonWriteString("      ████ ",column,row+4);
  118.          FBiMonWriteString("      ▀██▀ ",column,row+5);
  119.          rc=11;
  120.       break;
  121.    case '5':
  122.          FBiMonWriteString("▄█████████▄ ",column,row  );
  123.          FBiMonWriteString("████▀▀▀▀▀▀▀ ",column,row+1);
  124.          FBiMonWriteString("█████████▄  ",column,row+2);
  125.          FBiMonWriteString(" ▀▀▀▀▀▀████ ",column,row+3);
  126.          FBiMonWriteString("▄▄▄▄▄▄▄████ ",column,row+4);
  127.          FBiMonWriteString("▀████████▀  ",column,row+5);
  128.          rc=12;
  129.       break;
  130.    case '6':
  131.          FBiMonWriteString(" ▄███████▄  ",column,row  );
  132.          FBiMonWriteString("████▀▀▀▀▀▀  ",column,row+1);
  133.          FBiMonWriteString("█████████▄  ",column,row+2);
  134.          FBiMonWriteString("████▀▀▀████ ",column,row+3);
  135.          FBiMonWriteString("████▄▄▄████ ",column,row+4);
  136.          FBiMonWriteString(" ▀███████▀  ",column,row+5);
  137.          rc=12;
  138.       break;
  139.    case '7':
  140.          FBiMonWriteString("▄█████████▄ ",column,row  );
  141.          FBiMonWriteString("▀▀▀▀▀▀█████ ",column,row+1);
  142.          FBiMonWriteString("    ▄████▀  ",column,row+2);
  143.          FBiMonWriteString("   ████▀    ",column,row+3);
  144.          FBiMonWriteString("   ████     ",column,row+4);
  145.          FBiMonWriteString("   ▀██▀     ",column,row+5);
  146.          rc=12;
  147.       break;
  148.    case '8':
  149.          FBiMonWriteString(" ▄███████▄  ",column,row  );
  150.          FBiMonWriteString("████   ████ ",column,row+1);
  151.          FBiMonWriteString(" ▀██▄▄▄██▀  ",column,row+2);
  152.          FBiMonWriteString("▄███▀▀▀███▄ ",column,row+3);
  153.          FBiMonWriteString("████   ████ ",column,row+4);
  154.          FBiMonWriteString(" ▀███████▀  ",column,row+5);
  155.          rc=12;
  156.       break;
  157.    case '9':
  158.          FBiMonWriteString(" ▄███████▄  ",column,row  );
  159.          FBiMonWriteString("███▀   ▀███ ",column,row+1);
  160.          FBiMonWriteString("███▄   ▄███ ",column,row+2);
  161.          FBiMonWriteString(" ▀█████████ ",column,row+3);
  162.          FBiMonWriteString("      ▄████ ",column,row+4);
  163.          FBiMonWriteString(" ▀███████▀  ",column,row+5);
  164.          rc=12;
  165.       break;
  166.    case '0':
  167.          FBiMonWriteString(" ▄█████▄  ",column,row  );
  168.          FBiMonWriteString("████▀▀███ ",column,row+1);
  169.          FBiMonWriteString("███ ▄████ ",column,row+2);
  170.          FBiMonWriteString("████▀ ███ ",column,row+3);
  171.          FBiMonWriteString("███▄▄████ ",column,row+4);
  172.          FBiMonWriteString(" ▀█████▀  ",column,row+5);
  173.          rc=10;
  174.       break;
  175.    case ':':
  176.          FBiMonWriteString("     ",column,row  );
  177.          FBiMonWriteString(" ▄▄  ",column,row+1);
  178.          FBiMonWriteString("▀██▀ ",column,row+2);
  179.          FBiMonWriteString(" ▄▄  ",column,row+3);
  180.          FBiMonWriteString("▀██▀ ",column,row+4);
  181.          FBiMonWriteString("     ",column,row+5);
  182.          rc=5;
  183.       break;
  184.    }
  185.  
  186.    sprintf(retstr->strptr,"%d",rc);
  187.    retstr->strlength=strlen(retstr->strptr);
  188.    return 0;
  189. }
  190.  
  191. ULONG _System FBiMonCadre(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  192.    char tableau[81];
  193.  
  194.    long attribute=0;
  195.    long row=0;
  196.    long column=0;
  197.    long width=0;
  198.    long height=0;
  199.    int i;
  200.  
  201.    if (numargs!=5) {
  202.      retstr->strlength=1;
  203.       strcpy(retstr->strptr,"1");
  204.       return 1;
  205.    } /* endif */
  206.  
  207.    sscanf(RXSTRPTR(args[0]),"%d",&attribute);
  208.    sscanf(RXSTRPTR(args[1]),"%d",&column);
  209.    sscanf(RXSTRPTR(args[2]),"%d",&row);
  210.    sscanf(RXSTRPTR(args[3]),"%d",&width);
  211.    sscanf(RXSTRPTR(args[4]),"%d",&height);
  212.    for (i=1;i<width-1;tableau[i++]='─');
  213.    tableau[0]='┌'; tableau[width-1]='┐'; tableau[width]='\0';
  214.    FBiMonAttribute(attribute);
  215.    FBiMonWriteString(tableau,column,row);
  216.    for (i=(row+1);i<(row+height-1);i++) {
  217.       FBiMonWriteString("│",column,i);
  218.       FBiMonWriteString("│",column+width-1,i);
  219.    } /* endfor */
  220.    tableau[0]='└'; tableau[width-1]='┘';
  221.    FBiMonWriteString(tableau,column,row+height-1);
  222.  
  223.    retstr->strlength=1;
  224.    strcpy(retstr->strptr,"0");
  225.    return 0;
  226. }
  227.  
  228. ULONG _System FBiMonStrAt(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  229.    long attribute=0;
  230.    long row=0;
  231.    long column=0;
  232.  
  233.    if (numargs!=4) {
  234.      retstr->strlength=1;
  235.       strcpy(retstr->strptr,"1");
  236.       return 1;
  237.    } /* endif */
  238.  
  239.    sscanf(RXSTRPTR(args[1]),"%d",&attribute);
  240.    sscanf(RXSTRPTR(args[2]),"%d",&row);
  241.    sscanf(RXSTRPTR(args[3]),"%d",&column);
  242.    FBiMonAttribute(attribute);
  243.    FBiMonWriteString(RXSTRPTR(args[0]),column,row);
  244.  
  245.    retstr->strlength=1;
  246.    strcpy(retstr->strptr,"0");
  247.    return 0;
  248. }
  249.  
  250. ULONG _System FBiMonStr(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  251.    long attribute=0;
  252.  
  253.    if (numargs!=2) {
  254.      retstr->strlength=1;
  255.       strcpy(retstr->strptr,"1");
  256.       return 1;
  257.    } /* endif */
  258.  
  259.    sscanf(RXSTRPTR(args[1]),"%d",&attribute);
  260.    FBiMonAttribute(attribute);
  261.    FBiMonWriteTTY(RXSTRPTR(args[0]));
  262.  
  263.    retstr->strlength=1;
  264.    strcpy(retstr->strptr,"0");
  265.    return 0;
  266. }
  267.  
  268. ULONG _System FBiMonGotoXY(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  269.    long row=0;
  270.    long column=0;
  271.  
  272.    if (numargs!=2) {
  273.      retstr->strlength=1;
  274.       strcpy(retstr->strptr,"1");
  275.       return 1;
  276.    } /* endif */
  277.  
  278.    sscanf(RXSTRPTR(args[0]),"%d",&row);
  279.    sscanf(RXSTRPTR(args[1]),"%d",&column);
  280.    FBiMonSetPos(column,row);
  281.  
  282.    retstr->strlength=1;
  283.    strcpy(retstr->strptr,"0");
  284.    return 0;
  285. }
  286.  
  287. ULONG _System FBiMonCursor(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  288.    long first=0;
  289.    long second=0;
  290.    long options=0;
  291.  
  292.    if (numargs!=3) {
  293.      retstr->strlength=1;
  294.       strcpy(retstr->strptr,"1");
  295.       return 1;
  296.    } /* endif */
  297.  
  298.    sscanf(RXSTRPTR(args[0]),"%d",&first);
  299.    sscanf(RXSTRPTR(args[1]),"%d",&second);
  300.    sscanf(RXSTRPTR(args[2]),"%d",&options);
  301.    FBiMonSetCursorAspect(first,second,options);
  302.  
  303.    retstr->strlength=1;
  304.    strcpy(retstr->strptr,"0");
  305.    return 0;
  306. }
  307.  
  308. ULONG _System FBiMonSetAttribute(UCHAR *name,ULONG numargs,const RXSTRING *args,PSZ *queuename,RXSTRING *retstr) {
  309.    long attribute=0;
  310.  
  311.    if (numargs!=1) {
  312.      retstr->strlength=1;
  313.       strcpy(retstr->strptr,"1");
  314.       return 1;
  315.    } /* endif */
  316.  
  317.    sscanf(RXSTRPTR(args[0]),"%d",&attribute);
  318.    FBiMonAttribute(attribute);
  319.  
  320.    retstr->strlength=1;
  321.    strcpy(retstr->strptr,"0");
  322.    return 0;
  323. }
  324.  
  325. static void FBiMonFun(PCSZ name){
  326.    RexxRegisterFunctionDll(name,"FBIMON",name);
  327. }
  328.  
  329. ULONG _System FBiMon_loadfuncs(PCSZ name,LONG argc,const RXSTRING *argv,PCSZ queuename,PRXSTRING retstr){
  330.    retstr->strlength=0;
  331.    if (argc!=0) return 1;
  332.    FBiMonFun("FBIMONSTR");
  333.    FBiMonFun("FBIMONSTRAT");
  334.    FBiMonFun("FBIMONCLS");
  335.    FBiMonFun("FBIMONCURSOR");
  336.    FBiMonFun("FBIMONSETATTRIBUTE");
  337.    FBiMonFun("FBIMONGOTOXY");
  338.    FBiMonFun("FBIMONSLEEP");
  339.    FBiMonFun("FBIMONCHIFFRE");
  340.    FBiMonFun("FBIMONCADRE");
  341.    return 0;
  342. }
  343.  
  344. static char *rxstr_alloc (void) {
  345.    PVOID p;
  346.  
  347.    DosAllocMem (&p,0xf000,PAG_READ|PAG_WRITE|PAG_COMMIT);
  348.    return p;
  349. }
  350.